/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.scrumpmt.web;

import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.context.FacesContext;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.scrumpmt.domain.Proyecto;
import org.scrumpmt.domain.Tarea;
import org.scrumpmt.domain.TipoTarea;
import org.scrumpmt.ejb.ProyectoFacade;
import org.scrumpmt.ejb.TareaFacade;
import org.scrumpmt.ejb.TipoTareaFacade;

/**
 *
 * @author Emilio
 */
@ManagedBean(name = "nuevaTareaBean")
@RequestScoped
public class NuevaTareaBean extends BasicBean {

    private TipoTareaFacade tipoTareaFacade = lookupTipoTareaFacade();
    private ProyectoFacade proyectoFacade = lookupProyectoFacade();
    private TareaFacade tareaFacade = lookupTareaFacade();
    private String des;
    private String tipo;
    private String esfuerzo;
    private String producto;

    private TareaFacade lookupTareaFacade() {
        try {
            Context c = new InitialContext();
            return (TareaFacade) c.lookup("java:global/ScrumPMT/ScrumPMT-ejb/TareaFacade!org.scrumpmt.ejb.TareaFacade");
        } catch (NamingException ne) {
            log.log(Level.SEVERE, "exception caught", ne);
            throw new RuntimeException(ne);
        }
    }

    private TipoTareaFacade lookupTipoTareaFacade() {
        try {
            Context c = new InitialContext();
            return (TipoTareaFacade) c.lookup("java:global/ScrumPMT/ScrumPMT-ejb/TipoTareaFacade!org.scrumpmt.ejb.TipoTareaFacade");
        } catch (NamingException ne) {
            log.log(Level.SEVERE, "exception caught", ne);
            throw new RuntimeException(ne);
        }
    }

    private ProyectoFacade lookupProyectoFacade() {
        try {
            Context c = new InitialContext();
            return (ProyectoFacade) c.lookup("java:global/ScrumPMT/ScrumPMT-ejb/ProyectoFacade!org.scrumpmt.ejb.ProyectoFacade");
        } catch (NamingException ne) {
            log.log(Level.SEVERE, "exception caught", ne);
            throw new RuntimeException(ne);
        }
    }

    /**
     * Creates a new instance of NuevaTareaBean
     */
    public NuevaTareaBean() {
    }

    public String getDes() {
        return des;
    }

    public void setDes(String des) {
        this.des = des;
    }

    public String getProducto() {
        return producto;
    }

    public void setProducto(String proyecto) {
        this.producto = proyecto;
    }

    public String getTipo() {

        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getEsfuerzo() {
        return esfuerzo;
    }

    public void setEsfuerzo(String esfuerzo) {
        this.esfuerzo = esfuerzo;
    }

    public String guardarEsfuerzo() {
        return "";
    }

    public String submit() {
        if (des != null && tipo != null) {
            Tarea tarea = new Tarea();
            tarea.setDes(des);

            TipoTarea t = tipoTareaFacade.findByTipo(tipo);
            tarea.setIdTiptareaFk(t);

            FacesContext context = FacesContext.getCurrentInstance();
            ProductoSeleccionadoBean productoActual = (ProductoSeleccionadoBean) context.
                    getApplication().
                    evaluateExpressionGet(context, "#{productoSeleccionadoBean}", ProductoSeleccionadoBean.class);

            producto = productoActual.getProductoActual();
            log.log(Level.INFO, "Al proyecto que hay que poner la nueva tarea: {0}", producto);
            Proyecto p = proyectoFacade.find(Long.parseLong(producto));
            tarea.setIdProyectoFk(p);

            log.log(Level.INFO, "Pasamos a crear tarea nueva: {0}", des);
            tareaFacade.create(tarea);


            log.log(Level.INFO, "Tarea nueva creada: {0}", des);

            return ("");
        } else {
            log.log(Level.WARNING, "Has dejado un campo vacío");
            return ("");
        }
    }

    public String addTarea() {
        if (des != null && tipo != null) {
            Tarea tarea = new Tarea();
            tarea.setDes(des);

            TipoTarea t = tipoTareaFacade.findByTipo(tipo);
            tarea.setIdTiptareaFk(t);
            tarea.setIdProyectoFk(proyectoFacade.find(Long.parseLong(producto)));

            log.log(Level.INFO, "Pasamos a crear tarea nueva: {0}", des);
            tareaFacade.create(tarea);
            return String.valueOf(tarea.getId());
        }
        return "";
    }
}
